﻿// 1423. 封闭围栏.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>


/*

https://www.acwing.com/problem/content/1425/

一组封闭围栏可以看作平面上的一些不相交的首尾相连的线段组成的一个具有 N 个角的多边形。

每个角上顶点的位置都是互不相同的，各个角的位置坐标按照逆时针的顺序依次标为 (x1,y1),(x2,y2),…,(xN,yN)。

每对相邻的顶点之间都存在一段围栏，即点 (xi,yi) 与 (xi+1,yi+1) 之间存在一段围栏，我们规定 N+1=1，以便使围栏的第一个和最后一个顶点闭合。

一个有效的封闭围栏应共有 N 段围栏。

下图中包含一个点 (x,y) 和一组封闭围栏：


                         * x3,y3
                 x5,y5  / \
    x,y *          *   /   \
                  / \ /     \
                 /   *       \
           x6,y6*   x4,y4     \
                |              \
                |               \
           x1,y1*----------------* x2,y2
请你编写一个程序实现以下操作：

测试给定的一组 {xi,yi},i∈[1,N]，判断它是否是一个有效的封闭围栏。
找出在 (x,y) 处的人（无高度）能够看到的围栏段的集合。点 (x,y) 可能出现在任何位置，但不会出现在围栏上。
如果存在连接 (x，y) 和一段围栏（一条边）上任何点的射线，并且该射线不与围栏的任何其他围栏段（其他边）相交，则认为该段围栏能够被看到。

与视线平行的围栏段被认为无法看到。

在上图中，3−4 之间围栏段，5−6 之间围栏段以及 6−1 之间围栏段能够被看到。

输入格式
第一行包含一个整数 N。

第二行包含两个整数 x,y，表示观察者的位置坐标。

接下来 N 行，每行包含两个整数 xi,yi，表示围栏的一个顶点的位置坐标。

输出格式
如果给定围栏不是有效的封闭围栏，那么输出一行 NOFENCE。

否则，先输出能看到的围栏段数，占一行。

接下来，每行输出一个围栏段的两个顶点的位置坐标。

输出一个围栏段的两个顶点时，在输入中出现的早的顶点先输出，在输入中出现的晚的顶点后输出。

输出所有围栏段时，第二个顶点在输入中出现的早的先输出，出现的晚的后输出。

遇到第二个顶点相同的情况时，第一个顶点在输入中出现的早的先输出，出现的晚的后输出。

数据范围
3<N<200,
数据保证所有点的横纵坐标的绝对值都不超过 100。

输入样例：
13
5 5
0 0
7 0
5 2
7 5
5 7
3 5
4 9
1 8
2 5
0 9
-2 7
0 3
-3 1
输出样例：
7
0 0 7 0
5 2 7 5
7 5 5 7
5 7 3 5
-2 7 0 3
0 0 -3 1
0 3 -3 1
*/
int main()
{
    std::cout << "Hello World!\n";
}

 